package com.godofgamblers.hotelmanagementsystem.service;

import com.godofgamblers.hotelmanagementsystem.pojo.Room;

import java.util.List;

/**
 * @Author: 伴你时光尽头
 * @Date: 2019/10/16 20:27
 */
public interface RoomService {
    /**
     * 查询:
     * 查询所有的room
     *
     * @return room集合
     */
    public List<Room> showAllItem();

    /**
     * 查询:
     * 通过room对象中的room_num属性值查询room表中包含该字段的 且flag为1的数据，封装为Room类型的对象
     *
     * @return Room类型的POJO对象
     */
    public Room showItemByNum(Room room);

    /**
     * 查询:
     * 查询所有指定房间类型的room   返回room集合
     *
     * @return room集合
     */
    public List<Room> showItemsByType(Room room);

    /**
     * 修改
     * 根据room对象中的属性id确定修改数据行，根据room对象中state值update该条数据中room的状态值state
     *
     * @param room room pojo类对象
     */
    public void changeState(Room room);

    /**
     * 修改
     * 根据room对象中的属性id确定修改数据行，根据room对象中room_type_id值update该条数据中room的类型idroom_type_id
     *
     * @param room room pojo类对象
     */
    public void changeType(Room room);

    /**
     * 新增：
     * <p>
     * 根据room对象中的属性值创建新的room信息
     * <p>
     * 注意：
     * 新增前判断   当前表中是否存在意向新增的房间号  如果没有则执行此新增操作
     *
     * @param room
     */
    public void insertItem(Room room);

    /**
     * 新增：
     * 注意：
     * 此操作为表中已经存在状态为软删除的数据行的房间num 与 意向创建的房间num相同的情况下，直接执行修改room_type_id 以及flag软删除状态的操作  等同新增
     *
     * @param room
     */
    public void insertItemByUpdate(Room room);

    /**
     * 删除：
     * 软删除：实际为软删除  并不是真的删除
     * 根据id改变对应数据行的flag状态
     * <p>
     * 注意：
     * 在新增时判断  新增房间号是否存在于表中， 如果存在  就改变除房间号num之外的字段数据 以及flag
     *
     * @param room
     */
    public void deleteItem(Room room);

    /**
     * 查询:忽略flag
     * 通过room对象中的room_num属性值查询room表中包含该字段的 且flag为1的数据，封装为Room类型的对象
     *
     * @return Room类型的POJO对象
     */
    public Room showItemByNumIgnoreFlag(Room room);


    /**
     * 查询:
     * 通过room对象中的room_num属性值查询room表中包含该字段的 且flag为1的数据，封装为Room类型的对象
     *
     * @return Room类型的POJO对象
     */
    public Room showItemById(Room room);

    /**
     * 查询:
     * 查询所有指定房间类型以及num的room   返回room集合
     *
     * @return room集合
     */
    public List<Room> showItemsByTypeAndNum(Room room);

    /**
     * 修改
     * 根据room对象中的属性NUm确定修改数据行，根据room对象中state值update该条数据中room的状态值state
     *
     * @param room room pojo类对象
     */
    public void changeStateByNum(Room room);
}
